﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Gestión_UTN.util;

namespace Gestión_UTN.View.alta
{
    public partial class AltaUsuario : Form
    {
        private static Gestión_UTN.bl.usuariobl createUsuario = Gestión_UTN.factories.blfactory.createUsuario();

        public AltaUsuario()
        {
            InitializeComponent();
        }

        private void AltaUsuario_Load(object sender, EventArgs e)
        {
            string[] posiciones = { "Secretaria", "Coordinador/a" };

            this.cmbPosicion.Items.AddRange(posiciones);
        }

        private void LimpiarForm()
        {
            this.txtApellido.Clear();
            this.txtDNI.Clear();
            this.txtNombre.Clear();
            this.txtPassword.Clear();
            this.txtUsuario.Clear();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarForm();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {

                    bo.Usuariobo existe = createUsuario.FindUsuarioByUsuario(this.txtUsuario.Text, this.txtPassword.Text);

                    if (null == existe)
                    {
                        bo.Usuariobo user = new bo.Usuariobo();

                        user.Nombre = this.txtNombre.Text;
                        user.Apellido = this.txtApellido.Text;
                        user.Posicion = this.cmbPosicion.Text;
                        user.DNI = Convert.ToInt32(this.txtDNI.Text);
                        user.User = this.txtUsuario.Text;
                        user.Password = this.txtPassword.Text;

                        bool ingresado = createUsuario.SaveUsuario(user);

                        if (ingresado)
                        {
                            MessageBox.Show("Usuario Ingresado!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            if (MessageBox.Show("¿Desea Ingresar Otro Usuario?", "Consulta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                            {
                                LimpiarForm();
                            }
                            else
                            {
                                this.Close();

                                this.Dispose();

                                DialogResult = System.Windows.Forms.DialogResult.OK;
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("El Usuario ya se encuentra Registrado!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }

            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }
        }

        private bool Validar()
        {
            bool checkApellido = false;
            bool checkDNI = false;
            bool checkNombre = false;
            bool checkPass = false;
            bool checkPosicion = false;

            if (!Validador.es_nombre(txtNombre))
            {
                errProv.SetError(txtNombre, "Sólo Letras");
                checkNombre = false;
            }
            else
            {
                errProv.SetError(txtNombre, String.Empty);
                checkNombre = true;
            }

            if (!Validador.es_cadena(cmbPosicion))
            {
                errProv.SetError(cmbPosicion, "Sólo Letras");
                checkPosicion = false;
            }
            else
            {
                errProv.SetError(cmbPosicion, String.Empty);
                checkPosicion = true;
            }

            if (!Validador.es_nombre(txtApellido))
            {
                errProv.SetError(txtApellido, "Sólo Letras");
                checkApellido = false;
            }
            else
            {
                errProv.SetError(txtApellido, String.Empty);
                checkApellido = true;
            }

            if (!Validador.es_password(txtPassword))
            {
                errProv.SetError(txtPassword, "Sólo Letras y Números");
                checkPass = false;
            }
            else
            {
                errProv.SetError(txtPassword, String.Empty);
                checkPass = true;
            }

            if (!Validador.es_numero(txtDNI))
            {
                errProv.SetError(txtDNI, "Sólo Números");
                checkDNI = false;
            }
            else
            {
                errProv.SetError(txtDNI, String.Empty);
                checkDNI = true;
            }

            return (checkApellido && checkDNI &&
                checkNombre && checkPass && checkPosicion);
        }

        private void txtNombre_TextChanged(object sender, EventArgs e)
        {
            CrearUsuario();
        }

        private void txtApellido_TextChanged(object sender, EventArgs e)
        {
            CrearUsuario();
        }

        private void CrearUsuario()
        {
            string inicial = (this.txtNombre.Text.Trim().Length > 1)
                ? this.txtNombre.Text.Substring(0, 1)
                : "";

            string sub_apellido = (this.txtApellido.Text.Trim().Length > 3)
                ? this.txtApellido.Text.Substring(0, 4)
                : "";

            this.txtUsuario.Text = string.Concat(inicial, sub_apellido);
        }
    }
}
